<!--
 * @Author: scopesang
 * @Date: 2022-04-07 13:14:34
 * @LastEditors: scopesang
 * @LastEditTime: 2022-04-07 15:42:23
 * @FilePath: \cms-manage\test.html
 * @Description: 
 * 
 * Copyright (c) 2022 by scopesang/大鹏科技, All Rights Reserved. 
-->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style type="text/css">
       
    </style>
</head>
<body>
    <!-- <input type="button" value="测试" onclick="testf()"  /> -->
</body>
</html>
 
<script type="text/javascript">
//demo07面试题：请问bind，call，apply的区别
//1、相同点：
//   三个函数都会改变this的指向（调用这三个函数的函数内部的this）
 
//2、不同点：
//  1)、bind会产生新的函数，（把对象和函数绑定死后，产生新的函数）
//  2)、call和apply不会产生新的函数，只是在调用时，绑定一下而已。
//  3)、call和apply的区别，第一个参数都是要绑定的this，apply第二个参数是数组（是函数的所有参数），call把apply的第二个参数单列出来。
 
//示例代码：
// var name = "小之大"
// var age = 18;
// let obj  = {
//   name:'小张',
//   objAge:this.age,
//   newAge:this.age,
//   arrowShow:()=>{
//     //   箭头函是没有 this  往上找
//       console.log(this.age,"箭头函是没有",this);
//   },
//   show:function(){
//     //   谁调用就指向谁
//       console.log(this.objAge,"function",this);
//   }
// }

// obj.arrowShow()
// obj.show();


var name = "就看见来看",age="18"
var obj = {
    name:"小张",
    objAge:this.age,
    muFun:function(fm,t){
        //指向 当前对象
        console.log("name",this.name+this.age);
    }
}

var db = {
    name:'德玛',
    age:99
}

// 改变this 指向  bind 和其他两个不同  多一个括号
obj.muFun.call(db)
obj.muFun.apply(db)
// bind 返回的是一个新的函数，你必须调用它才会被执行
obj.muFun.bind(db)()

obj.myFun.call(db,'成都','上海')　　　　 // 德玛 年龄 99  来自 成都去往上海
obj.myFun.apply(db,['成都','上海'])      // 德玛 年龄 99  来自 成都去往上海  
obj.myFun.bind(db,'成都','上海')()       // 德玛 年龄 99  来自 成都去往上海




</script>

